// function() {

// }

// Number.prototype.add = function (num) {
//   return this + num
// }
// Number.prototype.minus = function (num) {
//   return this - num
// }
// console.log((5).add(2).minus(3))
// lodash提供了一个debounce方法，该方法的用法如下

// ```js
// const _ = require('lodash');
// const func = () => console.log('excuted');
// const debouncedFunc = _.debounce(func, 200)
// ```

// 通过以上调用，我们得到了一个名为debouncedFunc的函数，当这个函数被调用时，它不会立即打印出 excuted
// 而是等到200毫秒后打印；如果在200毫秒内它再次被调用时，它会再延迟一个200毫秒打印，以此类推；
// 请实现一个debounceWithDelay函数，它运行流程和以上流程相似，
// 但是它的延时是一个动态值，它的最小延时为输入值，最大延时为输入值的两倍，
// 每被多调用一次延时就增加输入值的50%，请参考以下调用：
// ```js
// const func = () => console.log('excuted');
// const debouncedFunc = debounceWithDelay(func, 200);
// debouncedFunc();
// setTimeout(debouncedFunc, 100);
// setTimeout(debouncedFunc, 300);
// //700毫秒左右的时候打印出最终结果
// ```
function debounceWithDelay(fn, time) {
  let timer = null
  let index;
  return function (...args) {
    if (timer) {
      clearTimeout(timer)
    }
    timer = setTimeout(() => {
      fn.apply(this, ...args)
      timer = null
    }, time)
  }
}
